/**
 * 登录后路由处理模块
 * 专门处理用户登录后的路由加载和侧边栏更新
 */

import { checkRoutesLoaded } from './route-updater'

/**
 * 登录后初始化路由和侧边栏
 * 在用户登录成功后调用此函数
 */
export async function initAfterLogin() {
  try {
    console.log('开始初始化登录后路由...')

    // 等待一小段时间确保路由已加载
    await new Promise(resolve => setTimeout(resolve, 300))

    // 检查路由是否已正确加载
    const routesLoaded = checkRoutesLoaded()

    if (routesLoaded) {
      console.log('路由已成功加载，触发侧边栏更新')
      // 触发侧边栏更新
      const event = new CustomEvent('sidebar-update')
      window.dispatchEvent(event)
    } else {
      console.warn('路由加载可能未完成，尝试刷新页面')
      // 如果路由未正确加载，尝试刷新页面
      setTimeout(() => {
        if (!checkRoutesLoaded()) {
          window.location.reload()
        }
      }, 1000)
    }

    return routesLoaded
  } catch (error) {
    console.error('登录后初始化失败:', error)
    // 如果初始化失败，尝试刷新页面
    setTimeout(() => {
      window.location.reload()
    }, 500)
    return false
  }
}

/**
 * 监听登录状态变化
 * 用于在用户登录状态变化时自动处理路由更新
 */
export function setupLoginListener() {
  // 监听Vuex状态变化
  if (window.__VUE_DEVTOOLS_GLOBAL_HOOK__ && window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue) {
    const Vue = window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue

    // 监听用户登录状态变化
    Vue.prototype.$watch('$store.state.user.token', (newToken, oldToken) => {
      if (newToken && !oldToken) {
        // 用户从未登录变为已登录
        console.log('检测到用户登录，开始初始化路由')
        initAfterLogin()
      }
    })
  }

  // 监听localStorage变化（用于跨标签页同步）
  window.addEventListener('storage', (event) => {
    if (event.key === 'access_token' && event.newValue) {
      console.log('检测到token变化，可能用户已登录')
      setTimeout(() => {
        initAfterLogin()
      }, 500)
    }
  })
}

/**
 * 验证路由权限
 * 检查当前用户是否有权限访问已加载的路由
 */
export function validateRoutePermissions(routes, userRoles) {
  const accessibleRoutes = routes.filter(route => {
    if (route.meta && route.meta.roles) {
      return route.meta.roles.some(requiredRole =>
        userRoles.includes(requiredRole)
      )
    }
    return true // 没有设置权限的路由默认可见
  })

  console.log('用户角色:', userRoles)
  console.log('可访问路由数量:', accessibleRoutes.length)
  console.log('所有路由数量:', routes.length)

  return accessibleRoutes
}
